package org.donald.compile;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 很长时间以来，Java程序员想尽办法把参数名字保存在java字节码里，并且让这些参数名字在运行时可用。Java 8
 * 终于把这个需求加入到了Java语言（使用反射API和Parameter.getName()
 * 方法）和字节码里（使用java编译命令javac的–parameters参数） 额外的，有一个方便的方法Parameter.isNamePresent()
 * 来验证参数名是不是可用。
 * 如果你编译这个class的时候没有添加参数–parameters，运行的时候你会得到这个结果：
 * Parameter: arg0
 * 编译的时候添加了–parameters参数的话，运行结果会不一样：
 * Parameter: args
 * 对于有经验的Maven使用者，–parameters参数可以添加到maven-compiler-plugin的配置部分：
 * 
 * @author donald 2018年3月14日 下午9:56:30
 */
public class ParameterNames {
	private static final Logger log = LoggerFactory.getLogger(ParameterNames.class);
	public static void main(String[] args) throws Exception {
		Method method = ParameterNames.class.getMethod("test", Integer.class, String.class);
		for (final Parameter parameter : method.getParameters()) {
			log.info("Parameter: " + parameter.getName());
		}
	}

	public void test(Integer age, String name) {

	}
}
